home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / SAT / myPlatform ƒ / sPlayerSprite.p < prev   
Encoding:
Text File  |  1994-07-26  |  3.0 KB  |  129 lines  |  [TEXT/PJMM]

  1. { Player sprite for the Platform test}
  2.  
  3. unit sPlayerSprite;
  4.  
  5. interface
  6.  
  7.     uses
  8.         SAT;
  9.  
  10.     var
  11.         rightFaces, leftFaces: array[0..3] of FacePtr;
  12.         fallFace: array[0..1] of FacePtr;
  13.         done: Boolean; {Boolean that tells if we should quit}
  14.  
  15.     procedure InitPlayerSprite;
  16.     procedure SetupPlayerSprite (me: SpritePtr);
  17.     procedure HandlePlayerSprite (me: SpritePtr);
  18.     procedure HitPlayerSprite (me, him: SpritePtr);
  19.  
  20. implementation
  21.  
  22.     procedure InitPlayerSprite;
  23.         var
  24.             i: integer;
  25.     begin
  26.         for i := 0 to 3 do
  27.             rightFaces[i] := GetFace(128 + i);
  28.         for i := 0 to 3 do
  29.             leftFaces[i] := GetFace(132 + i);
  30.         for i := 0 to 1 do
  31.             fallFace[i] := GetFace(136 + i);
  32.     end;
  33.  
  34.     procedure SetupPlayerSprite (me: SpritePtr);
  35.     begin
  36.         me^.mode := 0;
  37.         me^.speed.h := 1;
  38.         me^.kind := 1; {Friend kind}
  39.         SetRect(me^.hotRect, 8, 0, 24, 32);
  40.         me^.face := fallFace[0];
  41.         me^.task := @HandlePlayerSprite;
  42.         me^.hittask := @HitPlayerSprite;
  43.     end;
  44.  
  45.     procedure HandlePlayerSprite (me: SpritePtr);
  46.         var
  47.             theEvent: EventRecord;
  48.     begin
  49.         if me^.kind = 10 then
  50.             begin
  51.                 me^.speed.h := me^.speed.h div 2;
  52.             end;
  53.  
  54.         if GetOSEvent(keyDownMask + autoKeyMask, theEvent) then
  55.             begin
  56.                 if BitAnd(theEvent.modifiers, cmdKey) <> 0 then
  57.                     case char(BitAnd(theEvent.message, charCodeMask)) of
  58.                         'q', 'Q': 
  59.                             done := true; {Command-Q: quit!}
  60.                     end; {case}
  61.                 if me^.kind <> 1 then{Touching something - then we can control!}
  62.                     case char(bitand(theEvent.message, charCodeMask)) of
  63.                         ',': 
  64.                             me^.speed.h := -5;
  65.                         '.': 
  66.                             me^.speed.h := 5;
  67.                         ' ': 
  68.                             me^.speed.v := -5;
  69.                         otherwise
  70.                     end;
  71.             end;
  72.  
  73.         me^.position.h := me^.position.h + me^.speed.h;
  74.         me^.position.v := me^.position.v + me^.speed.v;
  75.         if me^.kind < 3 then {acceleration when in midair!}
  76.             me^.speed.v := me^.speed.v + 1;
  77.         if me^.speed.v > 30 then
  78.             me^.speed.v := 30;
  79.  
  80.         if me^.kind > 1 then
  81.             me^.kind := me^.kind - 1;
  82.  
  83. {Make sure we are always visible!}
  84.         if me^.position.v < 0 then
  85.             begin
  86.                 me^.position.v := 0;
  87.                 me^.speed.v := 0;
  88.             end;
  89.         if me^.position.h < 0 then
  90.             begin
  91.                 me^.position.h := 0;
  92.                 me^.speed.h := abs(me^.speed.h);
  93.             end;
  94.         if me^.position.v > gSAT.offSizeV - 32 then
  95.             begin
  96.                 me^.position.v := gSAT.offSizeV - 32;
  97.                 me^.speed.v := -abs(me^.speed.v) * 2 div 3;
  98.                 me^.kind := 7; {Allow movement for a short while!}
  99.             end;
  100.         if me^.position.h > gSAT.offSizeH - 32 then
  101.             begin
  102.                 me^.position.h := gSAT.offSizeH - 32;
  103.                 me^.speed.h := -abs(me^.speed.h);
  104.             end;
  105.  
  106.         me^.mode := abs(me^.mode + 1);
  107.  
  108.         if me^.kind > 1 then
  109.             begin
  110.                 if me^.speed.h > 0 then
  111.                     me^.face := RightFaces[band(me^.mode div 3, 3)];
  112.                 if me^.speed.h < 0 then
  113.                     me^.face := LeftFaces[band(me^.mode div 3, 3)];
  114.             end
  115.         else
  116.             me^.face := FallFace[band(me^.mode, 1)];
  117.  
  118.         me^.layer := -me^.position.v;
  119.     end;
  120.  
  121.     procedure HitPlayerSprite;
  122.     begin
  123. {Hit something! We can take whatever action we need here, but in this case, we let OtherSprite decide.}
  124. {(We could have omitted this function altogether and passed nil.)}
  125.         if him^.kind = 1 then
  126.         else if him^.kind = 2 then
  127.     end;
  128.  
  129. end.